package ln.javatest.day17.demo02;
/*
Stream流中的常用方法_filter：用于对Stream流中的数据进行过滤
Stream<T> filter(Predicate<? super T> predicate);
filter方法的参数Predicate是一个函数式接口，所以可以传递Lambda表达式，对数据进行过滤
Predicate中的抽象方法:
    boolean test(T t)
*/

import java.util.stream.Stream;

public class Demo03Stream_filter {
    public static void main(String[] args) {
        //创建一个Stream流
        Stream<String> stream = Stream.of("张三", "李四", "王五");
        //对Stream流中的元素进行过滤，只要姓张的人
        //因为filter流是一个延迟流所以可以把筛选过后的数据给到另一个流接着使用
        /*
        Stream流属于管道流，只能被消费（使用）一次
        第一个Stream流调用完毕方法，数据就会流转到下一个Stream上
        而这时第一个Stream流已经使用完毕，就会关闭了
        所以第一个Stream流就不能再调用方法了
        所以要把第一个流使用的结果返回给另一个流再对另一个流进行调用
        */
        Stream<String> stream1 = stream.filter(name -> name.startsWith("张"));
        //遍历stream1流
        stream1.forEach(name-> System.out.println(name));
    }
}
